package com.book.system.service.impl;

import com.book.system.dao.UserDao;
import com.book.system.entity.User;
import com.book.system.service.UserService;
import lombok.extern.slf4j.Slf4j;

import javax.servlet.http.HttpSession;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;

/**
 * @author ：oath
 * @date ：Created in 2024/4/27 12:03
 */
@Slf4j
public class UserServiceImpl implements UserService {

    private final UserDao userDao = new UserDao();

    /**
     *  登录
     * @param user 用户
     * @param session session
     * @return boolean
     */
    @Override
    public boolean login(User user, HttpSession session) {
        //调用dao数据库查询
        List<Map<String, Object>> list = userDao.login(user);

        System.out.println("数据库数据: "+list);
        log.info("数据库数据: {}", list);
        //当查询到一条数据时
        if (list != null && list.size() == 1) {
            //判断用户名和密码是否正确 身份是否正确
            if (user.getFlag().equals(list.get(0).get("flag"))) {
                session.setAttribute("user", user);
                return true;
            }
        }
        return false;
    }

    /**
     * 获取用户菜单
     * @param flag 用户身份码 0：管理员 1：读者
     * @return java.lang.String
     * @author : oath
     */
    @Override
    public String getMenu( Integer flag) {

        // 菜单JSON字符串
        String menu = null;
        // 菜单JSON文件名，并且它位于resources目录下
        String resourceName;
        if (flag == 0) {
            // 管理员菜单
            resourceName = "json/admin.json";
        } else {
            // 读者菜单
            resourceName = "json/reader.json";

        }
        // 使用ClassLoader加载JSON文件
        InputStream in = UserServiceImpl.class.getClassLoader().getResourceAsStream(resourceName);
        if (in == null) {
            System.out.println("无法找到JSON文件。");
            return null;
        } else {
            try {
                // 使用 ByteArrayOutputStream 来读取 InputStream 中的所有数据
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                // 读取数据到缓冲区
                byte[] buffer = new byte[1024];
                int bytesRead;
                // 循环读取数据
                while ((bytesRead = in.read(buffer)) != -1) {
                    baos.write(buffer, 0, bytesRead);
                }

                // 将 ByteArrayOutputStream 转换为字节数组
                byte[] jsonBytes = baos.toByteArray();

                // 将字节数组转换为字符串
                menu = new String(jsonBytes, StandardCharsets.UTF_8);

            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                // 始终记得关闭 InputStream
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return menu;
    }

    @Override
    public List<Map<String, Object>> getList(String name, Integer flag) {
        return null;
    }

    @Override
    public int add(User user) {
        return 0;
    }

    @Override
    public int updateById(User user) {
        return 0;
    }

    @Override
    public int delete(Integer integer) {
        return 0;
    }

    @Override
    public int rePassword(User user) {
        return 0;
    }


}